//
//  SqStackExt.hpp
//  DataStructure
//
//  Created by 舒磊明 on 2020/6/26.
//  Copyright © 2020 Shuleiming. All rights reserved.
//

#ifndef SqStackExt_hpp
#define SqStackExt_hpp

#include <stdio.h>
#include <stdlib.h>
#include "SqStack.hpp"

/**
 中缀表达式转后缀表达式（最后栈空）
 1.遇到操作数、直接加入后缀表达式
 2.遇到操作符、弹出所有高于或等于其的操作符，若遇到"("则停止，并入栈
 3.遇到"("直接入栈，遇到")"把操作符出栈，直到遇见"("
 A + B * (C - D) – E / F
 ABCD-*+EF/-
 
 后缀表达式的计算(最后栈中剩下一个元素)
 1.从左到右扫描
 2.如果为数字，则入栈
 3.如果为操作符，弹出2个元素B和A，然后A+B入栈
 AB+CD*E/-F+
 (A+B)-((C*D)/E)+F
 
 中缀表达式的计算（最后栈中剩下一个元素）
 1.初始化运算符栈和操作数栈
 2.遇见操作数则入栈，遇见操作符则和“中缀转后缀”一样弹出操作符
 */

// 中缀转前缀
// 右优先原则

// 前缀计算
// 从右往左扫描
// 1 遇到数字直接入栈
// 2 遇到运算符<op>，依次弹出A，B数字，将A <op> B 入栈

// I代表入栈，O代表出栈，判断出，入栈否合法
bool JudgePushPop(char *str);

// 判断单链表是否对称
typedef struct LNode {
    char data;
    struct LNode *next;
} LNode, *LinkList;

bool dc(LinkList L, int n);

#endif /* SqStackExt_hpp */
